package com.itheima.filter;

import com.itheima.bean.Employee;
import com.itheima.bean.User;
import com.itheima.utils.BaseContext;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/*
* 登陆过滤器
*   1.定义过滤器
*   2.注册过滤器 @WebFilter("/*")
*   3.在springBoot项目里面，不认识servlet阶段的内容
*    3.1需要在启动类上打上注解@servletComponentScan
* */
@WebFilter("/*")
public class LoginFilter  implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //0.需要向下转型
        HttpServletRequest req= (HttpServletRequest) servletRequest;
        HttpServletResponse resp= (HttpServletResponse) servletResponse;

        //1.获取当前的请求地址
        String uri = req.getRequestURI();

      //2.判断地址是否，属于免登录的地址，如果是，||那么直接放行
        if(uri.contains("login") || uri.endsWith(".js") || uri.endsWith(".css") || uri.contains("images")
                || uri.endsWith(".ico") || uri.contains("styles") || uri.contains("plugins")||uri.contains("user/sms")
                ||uri.contains("user/sendCode")||uri.contains("/common/download")||uri.contains("upload")
                ||uri.contains("user/login")){
            filterChain.doFilter(req,resp);
            return ;
        }



        //2.2如果不是，就要判断有没有登陆
        HttpSession session = req.getSession();

        //3.判断员工是否有登陆，其实只要从session作用域里面取出来员工信息即可
        //因为之前在登陆的时候，已经把员工的数据保存到了session作用域，key：employee
        Employee employee = (Employee) session.getAttribute("employee");

        if (employee !=null){
            //3.0把员工的id 保存到threadlocal里面去，方法一会进行添加或者更新的时候，能够快速的取出来id值
            BaseContext.setCurrentId(employee.getId());


            //3.1如果取到的数据不为null，表示已经登陆了，直接放行！
            filterChain.doFilter(req,resp);
            return;
        }
        //============前端判定=============
        User user = (User) session.getAttribute("user");
        if (user != null){
            //使用BaseUtils 设置id
            BaseContext.setCurrentId(user.getId());

            //3.1如果取到的数据不为null，表示已经登陆了，直接放行！
            filterChain.doFilter(req,resp);
            return;
        }

        //3.2如果取到的数据为null，表示没有登陆了，跳转到登陆页面！
        if (uri.contains("backend")){
            //这是跳转客户端登陆页面
            resp.sendRedirect("/backend/page/login/login.html");
        }else{
            //这是跳转到移动端登陆页面
            resp.sendRedirect("/front/page/login.html");
        }



    }
}
